package cn.bytecollege.service;

import cn.bytecollege.dao.RoomDao;
import cn.bytecollege.entity.Room;
import cn.bytecollege.entity.Page;

import java.util.List;

public class RoomService {
    private RoomDao roomDao=null;
    public RoomService(){
        roomDao =new RoomDao();
    }
    /**
     * @author LH
     * 通过roomNumber找未入住的room
     * @param roomNumber
     * @return
     */
    public Room findByRoomNumber(Integer roomNumber){
        return roomDao.findByRoomNumber(roomNumber);
    }


    /**
     * @author LH
     * 更改房间状态
     * @param roomId
     * @return
     */
    public int updateRoomStateTo1(Integer roomId) {
        return roomDao.updateRoomStateTo1(roomId);
    }

    /**
     * @author LH
     * 更改房间状态为0
     * @param roomId
     * @return
     */
    public int updateRoomStateTo0(Integer roomId) {
        return roomDao.updateRoomStateTo0(roomId);
    }
    /**
     * 分页查询所有房间的信息
     * @param pageIndex
     * @param pageSize
     * @param objects
     * @return
     * @author Mr.H
     */
    public Page<Room> findByStatePage(int pageIndex, int pageSize, Object... objects) {
        //分页查询数据
        List<Room> list=roomDao.findByStatePage(pageIndex,pageSize,objects);
        return toPage(pageIndex,pageSize,list);
    }

    /**
     * 查询所有未删除的房间信息
     * @param pageIndex
     * @param pageSize
     * @param objects
     * @return
     * @author Mr.H
     */
    public Page<Room> findAllByPage(int pageIndex, int pageSize, Object... objects) {
        List<Room> list=roomDao.findAllByPage(pageIndex,pageSize,objects);
        return toPage(pageIndex,pageSize, list);
    }

    /**
     * 根据房间编号查询房间信息
     * @param number
     * @return
     * @author Mr.H
     */
    public List<Room> findRoomByRoomNumber(Integer number) {
        return roomDao.findRoomByRoomNumber(number);
    }

    /**
     * 根据RoomCategoryId查询，房间表中是否有引用该分类的房间
     * @param roomCategoryId
     * @return
     *@author Mr.H
     */
    public List<Room> findRoomCategoryId(Integer roomCategoryId){
        return roomDao.findRoomCategoryId(roomCategoryId);
    }


    /**
     * 将查询到的数据封装到Page对象中进行分页
     * @param pageIndex
     * @param pageSize
     * @param list
     * @return
     * @author Mr.H
     */
    public Page<Room> toPage(int pageIndex, int pageSize,List<Room> list){
        //查询总条数
        int count=roomDao.count();
        //分装page对象
        Page<Room> page=new Page<>();
        page.setCurrentIndex(pageIndex);
        page.setPageSize(pageSize);
        page.setTotalPage(count);
        page.setTotal(count);
        page.setList(list);
        page.setPageIndex();
        return page;
    }

    /**
     * 统计现在还在使用的所有房间数
     * @return
     * @author Mr.H
     */
    public int count(){
        return roomDao.count();
    }
    /**
     * 新增房间
     * YL
     */
    public int save(Room room){
        return roomDao.save(room);
    }

    /**
     * 逻辑删除数据
     * YL
     */
    public int deleteById(Integer id){
        return roomDao.deleteById(id);
    }

    /**
     * 更新房间
     * YL
     */
    public int update(Room room){
        return roomDao.update(room);
    }

    /**
     * 根据ID查询数据
     * YL
     */
    public  Room findById(Integer id){
        return roomDao.findById(id);
    }


    /**
     * 方法重载，统计所有已入住的房间数
     * @param flag
     * @return
     */
    public int count(int flag){
        return roomDao.count(flag);
    }
}